home *** CD-ROM | disk | FTP | other *** search
- ;
- ;----- call2.mac Small-C arithmetic and logical library
- ;
- ;
- ; part 2 divide routine
- ; ;
- ;DIVIDE DE BY HL AND RETURN QUOTIENT IN HL, REMAINDER IN DE
- ;(SIGNED DIVIDE)
- ;
- CCDIV::
- DIV: MOV B,H
- MOV C,L
- MOV A,D
- XRA B
- PUSH PSW
- MOV A,D
- ORA A
- CM CCDENEG
- MOV A,B
- ORA A
- CM CCBCNEG
- MVI A,16
- PUSH PSW
- XCHG
- LXI D,0
- CCDIV1: DAD H
- CALL CCRDEL
- JZ CCDIV2
- CALL CCCMPBCDE
- JM CCDIV2
- MOV A,L
- ORI 1
- MOV L,A
- MOV A,E
- SUB C
- MOV E,A
- MOV A,D
- SBB B
- MOV D,A
- CCDIV2: POP PSW
- DCR A
- JZ CCDIV3
- PUSH PSW
- JMP CCDIV1
- CCDIV3: POP PSW
- RP
- CALL CCDENEG
- XCHG
- CALL CCDENEG
- XCHG
- RET
- ;
- ;NEGATE THE INTEGER IN DE
- ;(INTERNAL ROUTINE)
- ;
- CCDENEG: MOV A,D
- CMA
- MOV D,A
- MOV A,E
- CMA
- MOV E,A
- INX D
- RET
- ;
- ;NEGATE THE INTEGER IN BC
- ;(INTERNAL ROUTINE)
- ;
- CCBCNEG: MOV A,B
- CMA
- MOV B,A
- MOV A,C
- CMA
- MOV C,A
- INX B
- RET
- ;
- ;ROTATE DE LEFT ONE BIT
- ;(INTERNAL ROUTINE)
- ;
- CCRDEL:
- MOV A,E
- RAL
- MOV E,A
- MOV A,D
- RAL
- MOV D,A
- ORA E
- RET
- ;
- ;COMPARE BC TO DE
- ;(INTERNAL ROUTINE)
- ;
- CCCMPBCDE:
- MOV A,E
- SUB C
- MOV A,D
- SBB B
- RET
-
- END
-